首页 > 编程笔记

Python Series用法详解

在 Pandas 中,其主要的数据结构有两种,即 Series 和 DataFrame,本节重点介绍 Series。

Series 是一种类似于一维数组对象的结构,由一组元素和与之相关的一组标签组成,其结构如下图所示。


图 1 Series的结构

需要重点注意的是,Series 中元素的数据类型需为 NumPy 中的数据类型。

Series 的创建

可以通过 pandas 模块中的 Series 类创建 Series 对象,进而完成 Series 的创建,其语法格式如下:
Series(data,index,dtype,name)
其中,参数 data 表示元素;参数 index 表示标签,其默认值为从 0 开始的整数;参数 dtype 表示元素的数据类型,其值需为 NumPy 中的数据类型;参数 name 表示名称。

示例代码如下:
import pandas as pd
import numpy as np
#使用标量创建Series对象(默认标签)
s1=pd.Series(6)
print(s1)
print('=================')
#使用标量创建Series对象(指定标签)
s2=pd.Series(6,['a','b','c','d'])
print(s2)
print('=================')
#使用列表创建Series对象(默认标签)
s3=pd.Series([3,2,1,0])
print(s3)
print('=================')
#使用列表创建Series对象(指定标签)
s4=pd.Series([3,2,1,0],['a','b','c','d'])
print(s4)
print('=================')
#使用字典创建Series对象
#需要注意的是,字典中的键就是Series中的标签
s5=pd.Series({'a':3,'b':2,'c':0,'d':1})
print(s5)
print('=================')
#需要注意的是,如果指定的标签在字典中不存在,则其对应的数据部分使用NaN补齐
s6=pd.Series({'a':3,'b':2,'c':0,'d':1},['a','b','c','d','e'])
print(s6)
print('=================')
#使用NumPy中的数组对象创建Series对象(默认标签)
s7=pd.Series(np.array([3,2,0,1]))
print(s7)
print('=================')
#使用NumPy中的数组对象创建Series对象(指定标签)
s8=pd.Series(np.array([3,2,0,1]),['a','b','c','d'])
print(s8)

Series的访问

在 Pandas 中,可以通过位置、标签或布尔值的方式访问 Series,其中,位置和标签的关系如下图所示。


图 2 Series中位置和标签的关系

1、位置

1) 默认位置

可以通过 Series[pos] 的格式访问 Series,并获取 Series 中的元素,其中,Series 表示 Series 对象,pos 表示位置。

示例代码如下:
import pandas as pd
data={'a':3,'b':2,'c':0,'d':1}
s=pd.Series(data)
print(s[0])

2) 位置列表

可以通过 Series[list] 的格式访问 Series,并获取新的 Series,其中,Series 表示 Series 对象,list 表示由位置组成的列表。

示例代码如下:
import pandas as pd
data={'a':3,'b':2,'c':0,'d':1}
s=pd.Series(data)
lt=[1,3]
print(s[lt])

3) 位置数组对象

可以通过 Series[ndarray] 的格式访问 Series,并获取新的 Series,其中,Series 表示 Series 对象,ndarray 表示由位置组成的数组对象。

示例代码如下:
import pandas as pd
import numpy as np
data={'a':3,'b':2,'c':0,'d':1}
s=pd.Series(data)
nnp=np.array([0,2])
print(s[nnp])

4) 位置切片

可以通过 Series[start:end:step] 的格式访问 Series,并获取新的 Series,其中,Series 表示 Series 对象,start 表示开始位置,参数 end 表示结束位置,step 表示步长。

需要注意的是,使用该格式获取的 Series 包括开始位置所对应的元素,但不包括结束位置所对应的元素。

示例代码如下:
import pandas as pd
data={'a':3,'b':2,'c':0,'d':1}
s=pd.Series(data)
print(s[0:4:2])
print('========================')
print(s[0:4])
print('========================')
print(s[:1])

2、标签

1) 指定标签

可以通过 Series[index] 的格式访问 Series,并获取 Series 中的元素,其中,Series 表示 Series 对象,index 表示标签名。

示例代码如下:
import pandas as pd
data={'a':3,'b':2,'c':0,'d':1}
s=pd.Series(data)
print(s['a'])

2) 标签列表

可以通过 Series[list] 的格式访问 Series,并获取新的 Series,其中,Series 表示 Series 对象,list 表示由标签组成的列表。

示例代码如下:
import pandas as pd
data={'a':3,'b':2,'c':0,'d':1}
s=pd.Series(data)
lt=['c','d']
print(s[lt])

3) 标签数组对象

可以通过 Series[ndarray] 的格式访问 Series,并获取新的 Series,其中,Series 表示 Series 对象,ndarray 表示由标签组成的数组对象。

示例代码如下:
import pandas as pd
import numpy as np
data={'a':3,'b':2,'c':0,'d':1}
s=pd.Series(data)
nnp=np.array(['a','b'])
print(s[nnp])

4) 标签切片

可以通过 Series[start:end:step] 的格式访问 Series,并获取新的 Series,其中,Series 表示 Series 对象,start 表示开始标签,参数 end 表示结束标签,step 表示步长。

需要注意的是,使用该格式获取的 Series 包括开始标签和结束标签所对应的元素,示例代码如下:
import pandas as pd
data={'a':3,'b':2,'c':0,'d':1}
s=pd.Series(data)
print(s['a':'d':2])
print('========================')
print(s['a':'d'])
print('========================')
print(s[:'b'])

3、布尔值

1) 布尔值列表

可以通过 Series[list] 的格式访问 Series,并获取过滤后的 Series,其中,Series 表示 Series 对象,list 表示由布尔值组成的列表,并且当值为 True 时,其对应的元素保留,否则舍弃。

需要注意的是,布尔值列表中的元素个数必须与 Series 中的元素个数相等,示例代码如下:
import pandas as pd
data={'a':3,'b':2,'c':0,'d':1}
s=pd.Series(data)
bl=[True,False,True,False]
print(s[bl])

2) 布尔值数组对象

可以通过 Series[ndarray] 的格式访问 Series,并获取过滤后的 Series,其中,Series 表示 Series 对象,ndarray 表示由布尔值组成的数组对象,并且当值为 True 时,其对应的元素保留,否则舍弃。

需要注意的是,布尔值数组对象中的元素个数必须与 Series 中的元素个数相等,示例代码如下:
import pandas as pd
import numpy as np
data={'a':3,'b':2,'c':0,'d':1}
s=pd.Series(data)
nnp=np.array([True,False,True,False])
print(s[nnp])

3) 布尔值Series

可以通过 Series[Series] 的格式访问 Series,并获取过滤后的 Series,其中,第 1 个 Series 表示 Series 对象,第 2 个 Series 表示由布尔值组成的 Series 对象,并且当值为 True 时,其对应的元素保留,否则舍弃。

需要注意的是,布尔值 Series 中的元素个数必须与 Series 中的元素个数相等,示例代码如下:
import pandas as pd
data={'a':3,'b':2,'c':0,'d':1}
s=pd.Series(data)
bs=pd.Series({'a':False,'b':True,'c':False,'d':True})
print(s[bs])

4) 布尔值运算表达式

可以通过 Series[expression] 的格式访问 Series,并获取过滤后的 Series,其中,Series 表示 Series 对象,expression 表示布尔值运算表达式,用于保留符合布尔值运算表达式条件的元素。

示例代码如下:
import pandas as pd
# 创建一个字典data,其中包含键值对
data = {'a': 3, 'b': 2, 'c': 0, 'd': 1}
# 使用字典data创建一个Series对象s
s = pd.Series(data)
# 打印Series s中大于1的元素
print(s[s > 1])

推荐阅读

副业交流群 关注微信公众号,加入副业交流群,学习变现经验,交流各种打法。